
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

/**
 * @uml.dependency   supplier="NivelInfeccion"
 */
public class CasillaCiudad {

	/**
	 * @uml.property  name="ciudad"
	 */
	public Ciudad ciudad;	
	/**
	 * @uml.property  name="nivelesInfeccion"
	 */
	private Map<Color,NivelInfeccion> nivelesInfeccion;	
	/**
	 * @uml.property  name="adyacentes"
	 */
	private LinkedList<CasillaCiudad> adyacentes;

	/**
	 * Getter of the property <tt>ciudad</tt>
	 * @return  Returns the ciudad.
	 * @uml.property  name="ciudad"
	 */
	public Ciudad getCiudad() {
		return ciudad;
	}

	/**
	 * Setter of the property <tt>ciudad</tt>
	 * @param ciudad  The ciudad to set.
	 * @uml.property  name="ciudad"
	 */
	public void setCiudad(Ciudad ciudad) {
		this.ciudad = ciudad;
	}

	/**
	 * Getter of the property <tt>nivelesInfeccion</tt>
	 * @return  Returns the nivelesInfeccion.
	 * @uml.property  name="nivelesInfeccion"
	 */
	public Map<Color,NivelInfeccion> getNivelesInfeccion() {
		return nivelesInfeccion;
	}

	/**
	 * Setter of the property <tt>nivelesInfeccion</tt>
	 * @param nivelesInfeccion  The nivelesInfeccion to set.
	 * @uml.property  name="nivelesInfeccion"
	 */
	public void setNivelesInfeccion(Map<Color,NivelInfeccion> nivelesInfeccion) {
		this.nivelesInfeccion = nivelesInfeccion;
	}

	/**
	 * Getter of the property <tt>adyacentes</tt>
	 * @return  Returns the adyacentes.
	 * @uml.property  name="adyacentes"
	 */
	public LinkedList<CasillaCiudad> getAdyacentes() {
		return adyacentes;
	}

	/**
	 * Setter of the property <tt>adyacentes</tt>
	 * @param adyacentes  The adyacentes to set.
	 * @uml.property  name="adyacentes"
	 */
	public void setAdyacentes(LinkedList<CasillaCiudad> adyacentes) {
		this.adyacentes=adyacentes;
	}

	public CasillaCiudad(Ciudad ciudad){
		this.ciudad=ciudad;
		this.adyacentes=new LinkedList<CasillaCiudad>();
		
		Color[]enfermedad=Color.values();
		this.nivelesInfeccion=new HashMap<Color,NivelInfeccion>();
		for(Color c:enfermedad){
			this.nivelesInfeccion.put(c,new NivelInfeccion(0));	
		}
	}

	public static boolean tieneCentro(CasillaCiudad ciudad){
		boolean centro=false;
		if (Tablero.centrosInvestigacion.contains(ciudad)){
			return true;
		}
		return centro;
	}
	public boolean infectada(){
		boolean infectada=false;
		for(Color c:Color.values()){
			if (nivelesInfeccion.get(c).getNivel()>0) infectada=true;
		}
		return infectada;
	}
	public void imprimirInfecciones(){
		int i=0;
		for(Color color:Color.values()){	
			System.out.println("   "+i+") Color: "+color+" Nivel: "+getNivelesInfeccion().get(color).getNivel());
			i++;
		}
	}

	public void desinfectar(boolean todos, Color color) {
		if(todos){
			nivelesInfeccion.get(color).setNivel(0);
		}
		else{
			nivelesInfeccion.get(color).setNivel(nivelesInfeccion.get(color).getNivel()-1);
		}
	}
	
}
